package cn.com.anypay.manager.lakala.config;

import lombok.Data;

/**
 * 支付平台配置基础类
 * 所有支付平台配置都应该继承此类
 *
 * @author Claude
 * @date 2024-01-15
 */
@Data
public abstract class BasePaymentConfig {

    /**
     * 运行环境: test(测试) / sandbox(沙箱) / prod(生产)
     */
    private String environment = "test";

    /**
     * 应用ID（由支付平台分配）
     */
    private String appId;

    /**
     * 应用密钥/密码（由支付平台分配）
     */
    private String appSecret;

    /**
     * 商户号/商户ID
     */
    private String merchantId;

    /**
     * 请求超时时间（秒）
     */
    private Integer timeout = 30;

    /**
     * 重试次数
     */
    private Integer retryTimes = 3;

    /**
     * 是否启用调试模式
     */
    private Boolean debug = false;

    /**
     * 签名类型（如SHA256、MD5、RSA等）
     */
    private String signType = "SHA256";

    /**
     * 证书/私钥路径或内容
     */
    private String privateKey;

    /**
     * 公钥路径或内容
     */
    private String publicKey;

    /**
     * 证书序列号
     */
    private String serialNo;

    /**
     * 是否启用签名验证
     */
    private Boolean enableSignValidation = true;

    /**
     * 获取当前环境的基础URL
     * 子类必须实现此方法
     */
    public abstract String getBaseUrl();

    /**
     * 判断是否为生产环境
     */
    public boolean isProdEnvironment() {
        return "prod".equalsIgnoreCase(environment) || "production".equalsIgnoreCase(environment);
    }

    /**
     * 判断是否为测试环境
     */
    public boolean isTestEnvironment() {
        return "test".equalsIgnoreCase(environment);
    }

    /**
     * 判断是否为沙箱环境
     */
    public boolean isSandboxEnvironment() {
        return "sandbox".equalsIgnoreCase(environment);
    }

    /**
     * 判断是否为调试模式
     */
    public boolean isDebugMode() {
        return Boolean.TRUE.equals(debug);
    }

    /**
     * 判断是否启用签名验证
     */
    public boolean isSignValidationEnabled() {
        return Boolean.TRUE.equals(enableSignValidation);
    }
}